perm filename ARMFN[SYS,HE]1 blob sn#004226 filedate 1972-11-02 generic text, type T, neo UTF8
00100	HOPEN:				;OPENS THE HAND TO SET POINT
00200		TRNN HCL
00300		JRST[	MOVEI TAC,=240	;GO HERE FIRST TIME
00400			MOVEM TAC,HCNT	;MAX TIME TO SERVO THERE
00410			ADDI TAC,=60
00420			MOVEM TAC,COUNT
00500			HRLZ AC,@STKPTR	;REQUIRED OPENING
00600			MOVE MQ,[3.7]
00700			CAML AC,MQ
00800			MOVE AC,MQ	;NOT GREATER THAN 2.5
00900			MOVEM AC,RSET	;REQUIRED FINAL SET POINT
01000			PUSHJ P,HEAD	;READS THE HAND
01100			MOVE AC,HAND	;AND STORE IT HERE
01200			MOVEM AC,SET	;DYNAMIC SET POINT
01300			TRZ STCH	;TURN OFF TOUCH AND SAVE STATE
01400			MOVE TAC,[0.06]
01500			CAML AC,RSET
01600			MOVN TAC,TAC
01700			MOVEM TAC,DIR	;CHANGE OF SET POINT PER JIFFY
01800			TRO HCL		;SO THAT WE DON'T COME BACK HERE
01900			JUMPGE TAC,NXTJIF
02000			FSC TAC,-1	;IF CLOSING GO SLOWER
02100			MOVEM TAC,DIR
02200			SKIPE SOTCH	;AND RESTORE TOUCH
02300			TRO STCH
02400			JRST NXTJIF]
02500	HSU:	PUSHJ P, HEAD		;INCREMENTS SETPOINT AND SETS D/A
02600					;LEAVES ARM DATAO IN TAC
02700	IFE HANDWORK <
02800		JRST NEXT
02900	>
03000		SOSGE HCNT
03100		JRST[	MOVEI AC,HTERR
03200			MOVEM AC,TRAJER
03300			POP P,AC
03400			JRST TOFF]
03500		SKIPE DIR
03600		JRST DAW		;IF NOT AT FINAL SET DRIVE ANYWAY
03700		MOVE AC,RSET
03800		FSBR AC,HAND		;CHECK ERROR TOLERANCE
03900		MOVM AC,AC
04000		FSBR AC,[0.05]
04100		JUMPLE AC,[	TRZ HCL
04200				TDZ DATWD,HANDAT
04300				JRST NEXT]
04400	DAW:	
04500	IFN TRACK,<SKIPN WALK>
04600		DATAO ARM,DATWD		;DRIVE HAND
04700		JRST NXTJIF
04800	
     

00100	HCLOSE:
00200		TRNN HCL		;ONLY ONCE
00300		JRST[	TRZ STCH	;TURN OFF TOUCH AND SAVE STATE
00310			MOVEI TAC,=120
00320			MOVEM TAC,COUNT
00400			HRLZ AC,@STKPTR	;MINIMUN OPENING
00500			MOVEM AC,MINDST
00600			PUSHJ P,HEAD	;READ HAND
00700			MOVE AC,HAND
00800			MOVEM AC,SET
00900			MOVE TAC,[-0.10]
01000			MOVEM TAC,DIR	;CHANGE OF SET POINT PER JIFFY
01100			MOVSI AC,(4.0)
01200			MOVNM AC,RSET	;FINAL SET POINT -1 SO AS TO SQUEEZE
01300			TRO HCL
01400			JRST NXTJIF]
01500	BB:	PUSHJ P,HEAD
01600	IFE HANDWORK <
01700		JRST ER2
01800	>
01900	IFN TRACK,<SKIPN WALK>
02000		DATAO ARM,DATWD		;DRIVE HAND
02100		MOVE AC,HERR
02200		CAMG AC,[1.0]
02300		JRST NXTJIF		;IF ERROR LESS THAN 1 KEEP ON
02400	ER2:	TRZ HCL
02500		TDZ DATWD,HANDAT
02600		SKIPE SOTCH		;RESTORE TOUCH
02700		TRO STCH
02800		MOVE AC,MINDST
02900	IFE USER,<CAMG AC,HAND>
03000		JRST NEXT
03100		MOVEI 1,GRASER		;IF LESS THAN MINOPENING GIVE ERROR
03200		MOVEM 1,TRAJER
03300		POP P,1
03400		JRST  TOFF
03500	
     

00100	HEAD:	MOVEI K,HANDCHA
00200	IFE USER,<
00300		PUSHJ P,PREAD		;READ HAND CHANNEL
00400		LDB AC,SNUM
00500		ANDI DACVAL,7777
00600		ADDI AC,(DACVAL)	;ADD ALL THREE READINGS TOGETHER
00700		FSC AC,220
00800		FMPR AC,HSCALE
00900		FADR AC,HOFF
01000		MOVEM AC,HAND		;OPENING IN INCHES
01100	>
01200	IFN USER,<
01300		MOVE AC,HAND
01400		FADR AC,DIR
01500		SKIPG AC
01600		SETZ AC,
01700		MOVEM AC,HAND
01800	>
01900	IFN REPORT,<
02000		PUSH DATA,[<SIXBIT/HAND/>+1]
02100		PUSH DATA,HAND
02200	>
02300		SKIPN TAC,DIR
02400		JRST[	MOVE TAC,SET
02500			JRST GOTHER]
02600		FADRB TAC,SET 		;INCREMENT SET POINT
02700		FSBR TAC,RSET	;NEGATIVE REMAINS TO GO
02800		FMPR TAC,DIR
02900		JUMPGE TAC,[	MOVE TAC,RSET	;GOT THERE
03000				MOVEM TAC,SET
03100				SETZM DIR
03200				JRST GOTHER]
03300		MOVE TAC,SET
     

00100	GOTHER:	FSBR AC,TAC		;HAND SERVO
00200		EXCH AC,HERR
00300		FSBR AC,HERR
00400		FMPR AC,KVH
00500		MOVN TAC,HERR
00600		FMPR TAC,KEH
00700		FADR AC,TAC
00800		TDO DATWD,[HANDAT:XWD 4000,60]
00900		JUMPGE AC,.+2
01000		TRZ DATWD,40
01100		MOVM AC,AC
01200		FIX AC,211000
01300		CAILE AC,776000
01400		MOVEI AC,776000
01500		TRC AC,400000
01600		HRLI AC,6
01700	IFN DEB<
01800		MOVEM AC,HANDAW
01900	>
02000	IFN TRACK,<SKIPN WALK>
02100		DATAO WIDTH,AC
02200		POPJ P,
02300	HSCALE:	1.32
02400	HOFF:	-0.81
02500	DIR:	0			;CHANGE OF SETPOINT PER JIFFY
02600	SET:	0			;DYNAMIC SET POINT
02700	RSET:	0			;FINAL SET POINT
02800	MINDST:	0			;MIN OPENING FOR CLOSE
02900	HERR:	0			;HAND POSITION ERROR
03000	KEH:	5.0			;ERROR GAIN
03100	KVH:	10.0			;VELOCITY GAIN
03200	IFN DEB<
03300	HANDAW:	0
03400	>
03500	
     

00100	PLACE:				;PLACE HAND ON TABLE
00200		TRNN DROP		;ONLY COME HERE ONCE
00300		JRST[	TRO DROP+RUN+VZERO
00310			MOVEI 1,=180
00320			MOVEM 1,COUNT
00400			HRRE 1,@STKPTR
00500			ADDI 1,(CBUF)
00600			HRLI 1,(1)
00700			HRRI 1,DELTH
00800			BLT 1,DELTH+5	;CHANGE OF THETA PER JIFFY
00900			MOVEI 1,=12
01000			MOVEM 1,HCNT	;DON'T STOP FOR THE FIRST 12 JIFFIES
01100			MOVE DATWD,[770000252502]
01200			HRRZM DATWD,FBI
01300			JRST NXTJIF]
01400		SOSL HCNT
01500		JRST NXTJIF
01600	IFN USER,<JRST PLACED>
01700	EXL:	MOVE AC,ET0+1
01800		FSC AC,1
01900		FSBR AC,VERR+1
02000		MOVM AC,AC		;AVERAGE OF LAST TWO JOINT 2 ERRORS
02100		CAML AC,PLER
02200		JRST PLACED
02300		JRST NXTJIF
02400	PLACED:	JRST RUDONE
02600	PLER:	0.6
02700	
     

00100	NUDGE:	HRRE 1,@STKPTR		;DIFFERENTIAL CHANGE IN POSITION
00200		ADDI 1,(CBUF)
00300		HRLI 1,(1)
00400		HRRI 1,DELTH
00500		BLT 1,DELTH+5		;CHANGE AND NUMBER OF TICKS TO DO IT
00600		HRRE 1,@STKPTR
00700		ADDI 1,6(CBUF)
00800		MOVE DATWD,14(1)
00900		HRRZM DATWD,FBI
01000		MOVE 2,15(1)
01100		MOVEM 2,NTICKS
01110		ADDI 2,=60
01120		MOVEM 2,COUNT
01200		HRLI 1,(1)
01300		HRRI 1,CI
01400		BLT 1,CII+5
01410		MOVEI I,5
01432	NCCA:	MOVE AC,MOTARM(I)
01454		FADRM AC,CII(I)
01476		SOJGE I,NCCA
01500		TRO INCREM+RUN+VZERO+NUL
01600		SETZM TICKS
01700		SETZM FUNCT
01800		MOVEI I,5
01900	SGL:	TDNE DATWD,BMASK(I)
02000		TDO DATWD,BMASK(I)
02100		SOJGE I,SGL
02200		JRST NXTJIF
02300	
02400	
02500	STOP:	HRRE 1,@STKPTR
02600		ADDI 1,(CBUF)
02700		HRLI 1,(1)
02800		HRRI 1,STQ
02900		BLT 1,STQ+5
03200		MOVEI I,5
03300		SETZ AC,
03400	DSTQ:	MOVE TAC,STQ(I)
03500		FDVR TAC,F0(I)
03600		MOVM MQ,TAC
03700		CAMGE MQ,[0.2]
03800		SETZB TAC,STQ(I)
03900		MOVEM TAC,STQ(I)
04000		FMPR TAC,TAC
04100		FADR AC,TAC
04200		SOJGE I,DSTQ
04400		MOVEM AC,SDTQ
04500		SETZM ASTPP
04600		TRO STP
04700		JRST NEXT
04800	
04900	SAVE:	HRRE AC,@STKPTR
05000		SOJL AC,.+2
05100		CAILE AC,11
05200		JRST[	MOVEI TAC,SAVERR
05300			MOVEM TAC,TRAJER
05400			JRST TOFF]
05500		IMULI AC,6
05600		HRRI TAC,DTHS(AC)
05700		HRRZI MQ,5(TAC)
05800		HRLI TAC,DTH
05900		BLT TAC,(MQ)
06000		JRST NEXT
06100	
06200	RESTORE:HRRE AC,@STKPTR
06300		SOJL AC,.+2
06400		CAILE AC,11
06500		JRST[	MOVEI TAC,SAVERR
06600			MOVEM TAC,TRAJER
06700			JRST TOFF]
06800		IMULI AC,6
06900		HRRZI TAC,DTHS+5(AC)
06950		MOVEI I,5
07000	RESL:	MOVE AC,(TAC)
07100		FADRM AC,DELTH(I)
07200		SOJ TAC,
07300		SOJGE I,RESL
07400		JRST NEXT
07500	
07600	SET.ARM:HRRE I,@STKPTR
07700		ADDI I,(CBUF)
07800		HRRE AC,(I)
07900		SOJL AC,.+2
08000		CAIL AC,11
08100		JRST[	MOVEI TAC,SAVERR
08200			MOVEM TAC,TRAJER
08300			JRST TOFF]
08400		IMULI AC,6
08500		HRRI TAC,DTHS(AC)
08600		HRRZI MQ,5(TAC)
08700		HRLI TAC,1(I)
08800		BLT TAC,(MQ)
08900		JRST NEXT
09000	
     

00100	CENTER:	TRNN HCL
00200		JRST[	TRO HCL
00300			MOVEI TAC,=240
00400			MOVEM TAC,COUNT
00500			MOVSI AC,(4.0)
00600			MOVNM AC,RSET
00700			PUSHJ P,HEAD
00800			MOVE AC,SET
00900			TRZ STCH
01000			MOVE TAC,[-0.04]
01100			MOVEM TAC,DIR
01200			JRST NXTJIF]
01300		PUSHJ P,HEAD
01350	IFE HANDWORK,<JRST ER2>
01400		DATAO ARM,DATWD
01500		TRNN DROP
01600		JRST[	MOVEI I,1
01700		CFT:	MOVE AC,OBS(I)
01800			JUMPG AC,[SETZM TOT
01900				SKIPN I
02000				AOS TOT
02100				TRO DROP+RUN+VZERO
02200				MOVE TAC,[-0.02]
02300				MOVEM TAC,DIR
02400				HRRE TAC,@STKPTR
02500				ADDI TAC,(CBUF)
02600				MOVE AC,(TAC)
02700				MOVEM AC,MINDST
02800				AOJ TAC,
02900				MOVEI I,DELTH
03000			OT:	MOVE AC,(TAC)
03100				SKIPE TOT
03200				MOVNS AC
03300				MOVEM AC,(I)
03400				AOJ TAC,
03500				CAIGE I,DELTH+5
03600				AOJA I,OT
03700				MOVE TAC,[XWD 770000, 252500]
03800				HRRZM TAC,FBI
03900				IOR DATWD,TAC
03950				MOVEI I,4
03975			GETGO:	PUSHJ P,NXTH
03987				SOJGE I,GETGO
04000				JRST NXTJIF]
04100			SOJGE I,CFT
04200			JRST NXTJIF]
04300		MOVE TAC,TOT
04400		SKIPG OBS(TAC)
04500		JRST NXTJIF
04600		TRZ DROP+RUN+FINAL
04700		PUSHJ P,SETSET
04800		TDZ DATWD,[XWD 770000,252500]
04900		MOVEI TAC,2
05000		MOVEM TAC,FUNCT
05100		JRST NXTJIF]
05200	TOT:	0
05300	
05400	WOBBLE:	HRLZ AC,@STKPTR
05500		MOVEM AC,WOBMAG
05600		MOVEI AC,1
05700		MOVEM AC,WOBCNT+2
05800		MOVEM AC,WOBCNT+1
05900		MOVEI AC,6
06000		MOVEM AC,WOBCNT
06100		MOVN AC,WOBMAG
06500		FADRM AC,DTH+3
06550		TRO WOB
06600		JRST NEXT
06700	WOBMAG:	0
06800	WOBCNT:	BLOCK 3
06900	SIN:	 0.0
07000		 0.30902
07100		 0.58779
07200		 0.80902
07300		 0.95106
07400		 1.0
07500		 0.95106
07600		 0.80902
07700		 0.58779
07800		 0.30902
07900		 0.0
08000		-0.30902
08100		-0.58779
08200		-0.80902
08300		-0.95106
08400		-1.0
08500		-0.95106
08600		-0.80902
08700		-0.58779
08800		-0.30902
     

00100	REFLEX:	MOVEI I,1
00200		MOVEI K,65B23
00300	IFN USER,<POPJ P,>
00400	REX:	PUSHJ P,PREAD
00500		LDB AC,[POINT 12,DACVAL,11]
00600		ADD AC,REF(I)
00700		MOVEM AC,OBS(I)
00800	RMOR:	SOJGE I,REX
00900		TRNN STCH
01000		POPJ P,
01100		MOVEI I,1
01200	SIT:	MOVE AC,OBS(I)
01300		JUMPG AC,[	LSH I,3
01400				IORI I,TOUCH
01500				MOVEM I,TRAJER
01600				POP P,I
01700				JRST TOFF]
01800		SOJGE I,SIT
01900		POPJ P,
02000	
02100	REF:	-1000
02200		-1000
02300		BLOCK 4
02400	OBS:	BLOCK 2
02500	SOTCHS:	0
02600	
02700	SETCH:	MOVE AC,SOTCH
02800		MOVEM AC,SOTCHS
02900		HRLE AC,@STKPTR
03000		MOVEM AC,SOTCH
03100		JUMPE AC,NEXT
03200		TRO STCH
03300		JRST NEXT
03400	
     

00100		XLIST
00200		LIT
00300		LIST
00400		END START